Next.jsã®åçã€ã³ããŒãããã¹ã¿ãŒããæé©ãªã³ãŒãåå²ãå®çŸããããã®é«åºŠãªæŠç¥ã§ããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžããããŠãŒã¶ãŒäœéšãæ¹åããåæèªã¿èŸŒã¿æéãççž®ããŸãã
Next.jsã®åçã€ã³ããŒãïŒé«åºŠãªã³ãŒãå岿Šç¥
çŸä»£ã®ãŠã§ãéçºã«ãããŠãé«éã§å¿çæ§ã®é«ããŠãŒã¶ãŒäœéšãæäŸããããšã¯æãéèŠã§ãã人æ°ã®Reactãã¬ãŒã ã¯ãŒã¯ã§ããNext.jsã¯ããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãæé©åããããã®åªããããŒã«ãæäŸããŸãããã®äžã§æã匷åãªãã®ã®1ã€ãåçã€ã³ããŒãã§ãããã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿ãå¯èœã«ããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ãããå°ããªãã£ã³ã¯ïŒå¡ïŒã«åå²ããå¿ èŠãªãšãã«ã®ã¿èªã¿èŸŒãããšãã§ããããšãæå³ããŸããããã«ãããåæãã³ãã«ãµã€ãºãåçã«åæžãããèªã¿èŸŒã¿æéã®ççž®ãšãŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ãã®åäžã«ã€ãªãããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãNext.jsã®åçã€ã³ããŒããæŽ»çšããŠæé©ãªã³ãŒãåå²ãå®çŸããããã®é«åºŠãªæŠç¥ãæ¢ããŸãã
åçã€ã³ããŒããšã¯ïŒ
çŸä»£ã®JavaScriptã®æšæºæ©èœã§ããåçã€ã³ããŒãã¯ãã¢ãžã¥ãŒã«ãéåæã«ã€ã³ããŒãããããšãå¯èœã«ããŸããéçã€ã³ããŒãïŒãã¡ã€ã«ã®å
é ã§import
æã䜿çšããïŒãšã¯ç°ãªããåçã€ã³ããŒãã¯import()
颿°ã䜿çšããããã¯Promiseãè¿ããŸãããã®Promiseã¯ãã€ã³ããŒãããŠããã¢ãžã¥ãŒã«ã§è§£æ±ºãããŸããNext.jsã®æèã§ã¯ãããã«ãããã³ã³ããŒãã³ããã¢ãžã¥ãŒã«ãåæãã³ãã«ã«å«ããã®ã§ã¯ãªãããªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸããããã¯ç¹ã«æ¬¡ã®ãããªå Žåã«åœ¹ç«ã¡ãŸãã
- åæèªã¿èŸŒã¿æéã®ççž®ïŒåæè¡šç€ºã«å¿ èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãããšã§ããã©ãŠã¶ãããŠã³ããŒãããŠè§£æããå¿ èŠãããJavaScriptã®éãæå°éã«æããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒéèŠã§ãªãã³ã³ããŒãã³ããé å»¶èªã¿èŸŒã¿ããããšã§ãå®éã«å¿ èŠã«ãªããŸã§ãªãœãŒã¹ãæ¶è²»ããã®ãé²ããŸãã
- æ¡ä»¶ä»ãèªã¿èŸŒã¿ïŒãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ãããã€ã¹ã®çš®é¡ããã®ä»ã®æ¡ä»¶ã«åºã¥ããŠãç°ãªãã¢ãžã¥ãŒã«ãåçã«ã€ã³ããŒãã§ããŸãã
Next.jsã§ã®åçã€ã³ããŒãã®åºæ¬çãªå®è£
Next.jsã¯ãReactã³ã³ããŒãã³ãã§ã®åçã€ã³ããŒãã®äœ¿çšãç°¡çŽ åããçµã¿èŸŒã¿ã®next/dynamic
颿°ãæäŸããŠããŸãã以äžã«åºæ¬çãªäŸã瀺ããŸãã
import dynamic from 'next/dynamic';
const DynamicComponent = dynamic(() => import('../components/MyComponent'));
function MyPage() {
return (
This is my page.
);
}
export default MyPage;
ãã®äŸã§ã¯ãMyComponent
ã¯DynamicComponent
ãã¬ã³ããªã³ã°ããããšãã«ã®ã¿èªã¿èŸŒãŸããŸããnext/dynamic
颿°ã¯ãã³ãŒãåå²ãšé
å»¶èªã¿èŸŒã¿ãèªåçã«åŠçããŸãã
é«åºŠãªã³ãŒãå岿Šç¥
1. ã³ã³ããŒãã³ãã¬ãã«ã®ã³ãŒãåå²
æãäžè¬çãªäœ¿çšäŸã¯ãã³ã³ããŒãã³ãã¬ãã«ã§ã³ãŒããåå²ããããšã§ããããã¯ãã¢ãŒãã«ãŠã£ã³ããŠãã¿ãããŸãã¯ããŒãžã®äžéšã«è¡šç€ºãããã»ã¯ã·ã§ã³ãªã©ãåæããŒãžèªã¿èŸŒã¿æã«ããã«ã¯è¡šç€ºãããªãã³ã³ããŒãã³ãã«ç¹ã«å¹æçã§ããäŸãã°ãååã¬ãã¥ãŒã衚瀺ããeã³ããŒã¹ãµã€ããèããŠã¿ãŸããããã¬ãã¥ãŒã»ã¯ã·ã§ã³ã¯åçã«ã€ã³ããŒãã§ããŸãã
import dynamic from 'next/dynamic';
const ProductReviews = dynamic(() => import('../components/ProductReviews'), {
loading: () => Loading reviews...
});
function ProductPage() {
return (
Product Name
Product description...
);
}
export default ProductPage;
loading
ãªãã·ã§ã³ã¯ãã³ã³ããŒãã³ãã®èªã¿èŸŒã¿äžã«ãã¬ãŒã¹ãã«ããŒãæäŸãããŠãŒã¶ãŒäœéšãåäžãããŸããããã¯ãåç±³ãã¢ããªã«ã®äžéšãªã©ãã€ã³ã¿ãŒãããæ¥ç¶ãé
ãå°åã§ç¹ã«éèŠã§ãããããã®å°åã§ã¯ããŠãŒã¶ãŒã倧ããªJavaScriptãã³ãã«ã®èªã¿èŸŒã¿ã«é
å»¶ãçµéšããå¯èœæ§ããããŸãã
2. ã«ãŒãããŒã¹ã®ã³ãŒãåå²
Next.jsã¯èªåçã«ã«ãŒãããŒã¹ã®ã³ãŒãåå²ãå®è¡ããŸããpages
ãã£ã¬ã¯ããªå
ã®åããŒãžã¯å¥ã
ã®ãã³ãã«ã«ãªããŸããããã«ããããŠãŒã¶ãŒãç¹å®ã®ã«ãŒãã«ç§»åãããšãã«ããã®ã«ãŒãã«å¿
èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãŸããããã«ãªããŸããããã¯ããã©ã«ãã®åäœã§ãããã¢ããªã±ãŒã·ã§ã³ãããã«æé©åããããã«ã¯ãããçè§£ããããšãäžå¯æ¬ ã§ããç¹å®ã®ããŒãžã®ã¬ã³ããªã³ã°ã«å¿
èŠãªããå€§èŠæš¡ã§äžèŠãªã¢ãžã¥ãŒã«ãããŒãžã³ã³ããŒãã³ãã«ã€ã³ããŒãããããšã¯é¿ããŠãã ãããç¹å®ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãç¹å®ã®æ¡ä»¶äžã§ã®ã¿å¿
èŠãªå Žåã¯ãåçã«ã€ã³ããŒãããããšãæ€èšããŠãã ããã
3. æ¡ä»¶ä»ãã³ãŒãåå²
åçã€ã³ããŒãã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ãããã©ãŠã¶ããµããŒãããæ©èœããŸãã¯ãã®ä»ã®ç°å¢èŠå ã«åºã¥ããŠæ¡ä»¶ä»ãã§äœ¿çšã§ããŸããããã«ãããç¹å®ã®ã³ã³ããã¹ãã«åºã¥ããŠç°ãªãã³ã³ããŒãã³ããã¢ãžã¥ãŒã«ãèªã¿èŸŒãããšãã§ããŸããäŸãã°ããŠãŒã¶ãŒã®å ŽæïŒãžãªãã±ãŒã·ã§ã³APIã䜿çšïŒã«åºã¥ããŠç°ãªããããã³ã³ããŒãã³ããèªã¿èŸŒãã ããå€ããã©ãŠã¶ã«å¯ŸããŠã®ã¿ããªãã£ã«ãèªã¿èŸŒãã ãããããšãã§ããŸãã
import dynamic from 'next/dynamic';
function MyComponent() {
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
const DynamicComponent = dynamic(() => {
if (isMobile) {
return import('../components/MobileComponent');
} else {
return import('../components/DesktopComponent');
}
});
return (
);
}
export default MyComponent;
ãã®äŸã¯ããŠãŒã¶ãŒãã¢ãã€ã«ããã€ã¹ã䜿çšããŠãããã©ããã«åºã¥ããŠç°ãªãã³ã³ããŒãã³ããèªã¿èŸŒãããšã瀺ããŠããŸããããä¿¡é Œæ§ã®é«ãã¯ãã¹ãã©ãŠã¶äºææ§ã®ããã«ãå¯èœãªéããŠãŒã¶ãŒãšãŒãžã§ã³ãã®å€å®ãããæ©èœæ€åºã®éèŠæ§ãå¿ã«çããŠãããŠãã ããã
4. Web Workerã®äœ¿çš
ç»ååŠçãè€éãªèšç®ãªã©ãèšç®è² è·ã®é«ãã¿ã¹ã¯ã«ã¯ãWeb Workerã䜿çšããŠäœæ¥ãå¥ã®ã¹ã¬ããã«ãªãããŒãããã¡ã€ã³ã¹ã¬ããããããã¯ãããŠUIãããªãŒãºããã®ãé²ãããšãã§ããŸããåçã€ã³ããŒãã¯ãWeb Workerã¹ã¯ãªããããªã³ããã³ãã§èªã¿èŸŒãããã«äžå¯æ¬ ã§ãã
import dynamic from 'next/dynamic';
function MyComponent() {
const startWorker = async () => {
const MyWorker = dynamic(() => import('../workers/my-worker'), {
ssr: false // Web Workerã®ããã«ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ãç¡å¹ã«ãã
});
const worker = new (await MyWorker()).default();
worker.postMessage({ data: 'some data' });
worker.onmessage = (event) => {
console.log('Received from worker:', event.data);
};
};
return (
);
}
export default MyComponent;
ssr: false
ãªãã·ã§ã³ã«æ³šæããŠãã ãããWeb Workerã¯ãµãŒããŒãµã€ãã§ã¯å®è¡ã§ããªããããåçã€ã³ããŒãã«å¯ŸããŠãµãŒããŒãµã€ãã¬ã³ããªã³ã°ãç¡å¹ã«ããå¿
èŠããããŸãããã®ã¢ãããŒãã¯ãäžçäžã§äœ¿çšãããéèã¢ããªã±ãŒã·ã§ã³ã§å€§èŠæš¡ãªããŒã¿ã»ãããåŠçãããªã©ããŠãŒã¶ãŒäœéšãæãªãå¯èœæ§ã®ããã¿ã¹ã¯ã«æçã§ãã
5. åçã€ã³ããŒãã®ããªãã§ãã
åçã€ã³ããŒãã¯éåžžãªã³ããã³ãã§èªã¿èŸŒãŸããŸããããŠãŒã¶ãŒãããã«å¿
èŠãšãããšäºæ³ãããå Žåã«ã¯ããªãã§ããïŒäºåèªã¿èŸŒã¿ïŒããããšãã§ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ãããã«åäžãããããšãã§ããŸããNext.jsã¯ããªã³ã¯å
ã®ããŒãžã®ã³ãŒããããªãã§ããããprefetch
ããããã£ãæã€next/link
ã³ã³ããŒãã³ããæäŸããŠããŸããããããåçã€ã³ããŒãã®ããªãã§ããã«ã¯ç°ãªãã¢ãããŒããå¿
èŠã§ããReact.preload
APIïŒæ°ããReactããŒãžã§ã³ã§å©çšå¯èœïŒã䜿çšããããIntersection Observer APIã䜿çšããŠã³ã³ããŒãã³ãã衚瀺ããããã«ãªã£ãããšãæ€åºããã«ã¹ã¿ã ã®ããªãã§ããã¡ã«ããºã ãå®è£
ããããšãã§ããŸãã
äŸïŒIntersection Observer APIã䜿çšïŒïŒ
import dynamic from 'next/dynamic';
import { useEffect, useRef } from 'react';
const DynamicComponent = dynamic(() => import('../components/MyComponent'));
function MyPage() {
const componentRef = useRef(null);
useEffect(() => {
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
// ããªãã§ããã®ããã«æåã§ã€ã³ããŒããããªã¬ãŒãã
import('../components/MyComponent');
observer.unobserve(componentRef.current);
}
});
},
{ threshold: 0.1 }
);
if (componentRef.current) {
observer.observe(componentRef.current);
}
return () => {
if (componentRef.current) {
observer.unobserve(componentRef.current);
}
};
}, []);
return (
My Page
);
}
export default MyPage;
ãã®äŸã§ã¯ãIntersection Observer APIã䜿çšããŠDynamicComponent
ã衚瀺ããããã«ãªã£ãããšãæ€åºããã€ã³ããŒããããªã¬ãŒããããšã§ã广çã«ã³ãŒããããªãã§ããããŸããããã«ããããŠãŒã¶ãŒãå®éã«ã³ã³ããŒãã³ããšå¯Ÿè©±ãããšãã®èªã¿èŸŒã¿æéãççž®ã§ããŸãã
6. å ±éã®äŸåé¢ä¿ã®ã°ã«ãŒãå
è€æ°ã®åçã«ã€ã³ããŒããããã³ã³ããŒãã³ããå
±éã®äŸåé¢ä¿ãå
±æããŠããå Žåããããã®äŸåé¢ä¿ãåã³ã³ããŒãã³ãã®ãã³ãã«ã§éè€ããªãããã«ããŠãã ãããNext.jsã䜿çšãããã³ãã©ãŒã§ããWebpackã¯ãå
±éã®ãã£ã³ã¯ãèªåçã«èå¥ããŠæœåºã§ããŸãããã ãããã£ã³ã¯ã®æåãããã«æé©åããããã«ãWebpackã®èšå®ïŒnext.config.js
ïŒãæ§æããå¿
èŠãããå ŽåããããŸããããã¯ãUIã³ã³ããŒãã³ãã©ã€ãã©ãªããŠãŒãã£ãªãã£é¢æ°ãªã©ãã°ããŒãã«ã«äœ¿çšãããã©ã€ãã©ãªã«ç¹ã«é¢é£ããŸãã
7. ãšã©ãŒãã³ããªã³ã°
ãããã¯ãŒã¯ãå©çšã§ããªãå Žåããäœããã®çç±ã§ã¢ãžã¥ãŒã«ãèªã¿èŸŒããªãå Žåãåçã€ã³ããŒãã¯å€±æããå¯èœæ§ããããŸããã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããã®ãé²ãããã«ããããã®ãšã©ãŒãé©åã«åŠçããããšãéèŠã§ããnext/dynamic
颿°ã§ã¯ãåçã€ã³ããŒãã倱æããå Žåã«è¡šç€ºããããšã©ãŒã³ã³ããŒãã³ããæå®ã§ããŸãã
import dynamic from 'next/dynamic';
const DynamicComponent = dynamic(() => import('../components/MyComponent'), {
loading: () => Loading...
,
onError: (error, retry) => {
console.error('Failed to load component', error);
retry(); // ãªãã·ã§ã³ã§ã€ã³ããŒããå詊è¡ãã
}
});
function MyPage() {
return (
);
}
export default MyPage;
onError
ãªãã·ã§ã³ã䜿çšãããšããšã©ãŒãåŠçããå Žåã«ãã£ãŠã¯ã€ã³ããŒããå詊è¡ã§ããŸããããã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãäžå®å®ãªå°åã®ãŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ãã
åçã€ã³ããŒãã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
- åçã€ã³ããŒãã®åè£ãç¹å®ããïŒã¢ããªã±ãŒã·ã§ã³ãåæããåæããŒãžèªã¿èŸŒã¿ã«äžå¯æ¬ ã§ãªãã³ã³ããŒãã³ããã¢ãžã¥ãŒã«ãç¹å®ããŸãã
- ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã䜿çšããïŒã³ã³ããŒãã³ãã®èªã¿èŸŒã¿äžã«ããŠãŒã¶ãŒã«èŠèŠçãªåå³ãæäŸããŸãã
- ãšã©ãŒãé©åã«åŠçããïŒã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããªãããã«ããšã©ãŒãã³ããªã³ã°ãå®è£ ããŸãã
- ãã£ã³ã¯ãæé©åããïŒWebpackãèšå®ããŠãã£ã³ã¯ã®æåãæé©åããå ±éã®äŸåé¢ä¿ã®éè€ãé¿ããŸãã
- 培åºçã«ãã¹ãããïŒåçã€ã³ããŒããæå¹ã«ããŠã¢ããªã±ãŒã·ã§ã³ããã¹ããããã¹ãŠãæåŸ ã©ããã«åäœããããšã確èªããŸãã
- ããã©ãŒãã³ã¹ãç£èŠããïŒããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠãåçã€ã³ããŒããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«äžãã圱é¿ã远跡ããŸãã
- ãµãŒããŒã³ã³ããŒãã³ããæ€èšããïŒNext.js 13以äžïŒïŒæ°ããããŒãžã§ã³ã®Next.jsã䜿çšããŠããå Žåã¯ããµãŒããŒã§ã¬ã³ããªã³ã°ããžãã¯ãå®è¡ããã¯ã©ã€ã¢ã³ããµã€ãã®JavaScriptãã³ãã«ãåæžãããµãŒããŒã³ã³ããŒãã³ãã®å©ç¹ãæ¢ããŸãããµãŒããŒã³ã³ããŒãã³ãã¯ãå€ãã®å Žåãåçã€ã³ããŒãã®å¿ èŠæ§ããªããããšãã§ããŸãã
ã³ãŒãåå²ãåæã»æé©åããããã®ããŒã«
ã³ãŒãå岿Šç¥ã®åæãšæé©åã«åœ¹ç«ã€ããã€ãã®ããŒã«ããããŸãã
- Webpack Bundle AnalyzerïŒãã®ããŒã«ã¯Webpackãã³ãã«ã®ãµã€ãºãèŠèŠåãã倧ããªäŸåé¢ä¿ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
- LighthouseïŒãã®ããŒã«ã¯ãã³ãŒãåå²ã®æšå¥šäºé ãå«ãããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ã«é¢ããæŽå¯ãæäŸããŸãã
- Next.js DevtoolsïŒNext.jsã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåæããæ¹åç¹ãç¹å®ããã®ã«åœ¹ç«ã€çµã¿èŸŒã¿ã®éçºããŒã«ãæäŸããŠããŸãã
å®äžçã®äŸ
- Eã³ããŒã¹ãµã€ãïŒååã¬ãã¥ãŒãé¢é£ååããã§ãã¯ã¢ãŠããããŒãåçã«èªã¿èŸŒã¿ãŸããããã¯ãç¹ã«æ±åã¢ãžã¢ãã¢ããªã«ã®äžéšãªã©ãã€ã³ã¿ãŒãããé床ãé ãå°åã®ãŠãŒã¶ãŒã«ã¹ã ãŒãºãªã·ã§ããã³ã°äœéšãæäŸããããã«äžå¯æ¬ ã§ãã
- ãã¥ãŒã¹ãµã€ãïŒç»åãåç»ãé å»¶èªã¿èŸŒã¿ããã³ã¡ã³ãã»ã¯ã·ã§ã³ãåçã«èªã¿èŸŒã¿ãŸããããã«ããããŠãŒã¶ãŒã¯å€§ããªã¡ãã£ã¢ãã¡ã€ã«ã®èªã¿èŸŒã¿ãåŸ ã€ããšãªããäž»èŠãªã³ã³ãã³ãã«ãã°ããã¢ã¯ã»ã¹ã§ããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒãã£ãŒãããããã£ãŒã«ããã£ãããŠã£ã³ããŠãåçã«èªã¿èŸŒã¿ãŸããããã«ããã倿°ã®ãŠãŒã¶ãŒãšæ©èœããã£ãŠãããã©ãããã©ãŒã ã®å¿çæ§ãç¶æãããŸãã
- æè²ãã©ãããã©ãŒã ïŒã€ã³ã¿ã©ã¯ãã£ããªæŒç¿ãã¯ã€ãºããããªè¬çŸ©ãåçã«èªã¿èŸŒã¿ãŸããããã«ãããåŠçã¯æåã®å€§ããªããŠã³ããŒãã«å§åãããããšãªããåŠç¿ææã«ã¢ã¯ã»ã¹ã§ããŸãã
- éèã¢ããªã±ãŒã·ã§ã³ïŒè€éãªãã£ãŒããããŒã¿èŠèŠåãã¬ããŒãããŒã«ãåçã«èªã¿èŸŒã¿ãŸããããã«ãããã¢ããªã¹ãã¯åž¯åå¹ ãéãããŠããŠããéèããŒã¿ã«ãã°ããã¢ã¯ã»ã¹ããŠåæã§ããŸãã
çµè«
åçã€ã³ããŒãã¯ãNext.jsã¢ããªã±ãŒã·ã§ã³ãæé©åããé«éã§å¿çæ§ã®é«ããŠãŒã¶ãŒäœéšãæäŸããããã®åŒ·åãªããŒã«ã§ããã³ãŒããæŠç¥çã«åå²ãããªã³ããã³ãã§èªã¿èŸŒãããšã«ãããåæãã³ãã«ãµã€ãºãå€§å¹ ã«åæžããããã©ãŒãã³ã¹ãåäžããããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããé«ããããšãã§ããŸãããã®ã¬ã€ãã§æŠèª¬ããé«åºŠãªæŠç¥ãçè§£ããå®è£ ããããšã§ãNext.jsã¢ããªã±ãŒã·ã§ã³ã次ã®ã¬ãã«ã«åŒãäžããäžçäžã®ãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ãªäœéšãæäŸã§ããŸããæé©ãªçµæã確å®ã«ããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããå¿ èŠã«å¿ããŠã³ãŒãå岿Šç¥ãé©å¿ãããããšãå¿ããªãã§ãã ããã
åçã€ã³ããŒãã¯åŒ·åã§ããäžæ¹ãã¢ããªã±ãŒã·ã§ã³ã«è€éããå ããããšãå¿ã«çããŠãããŠãã ãããããããå®è£ ããåã«ãããã©ãŒãã³ã¹åäžãšè€éãã®å¢å ãšã®éã®ãã¬ãŒããªããæ éã«æ€èšããŠãã ãããå€ãã®å Žåãå¹ççãªã³ãŒããæã€é©åã«èšèšãããã¢ããªã±ãŒã·ã§ã³ã¯ãåçã€ã³ããŒãã«å€§ããäŸåããããšãªããå€§å¹ ãªããã©ãŒãã³ã¹æ¹åãéæã§ããŸããããããå€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠã¯ãåçã€ã³ããŒãã¯åªãããŠãŒã¶ãŒäœéšãæäŸããããã®äžå¯æ¬ ãªããŒã«ã§ãã
ããã«ãææ°ã®Next.jsãšReactã®æ©èœã«åžžã«æ³šæãæã£ãŠãã ããããµãŒããŒã³ã³ããŒãã³ãïŒNext.js 13以äžã§å©çšå¯èœïŒã®ãããªæ©èœã¯ãã³ã³ããŒãã³ãããµãŒããŒã§ã¬ã³ããªã³ã°ããå¿ èŠãªHTMLã®ã¿ãã¯ã©ã€ã¢ã³ãã«éä¿¡ããããšã§ãå€ãã®åçã€ã³ããŒãã®å¿ èŠæ§ã眮ãæããå¯èœæ§ããããŸããããã«ãããåæã®JavaScriptãã³ãã«ãµã€ãºãåçã«åæžãããŸããé²åãç¶ãããŠã§ãéçºæè¡ã®ç¶æ³ã«åºã¥ããŠãã¢ãããŒããç¶ç¶çã«è©äŸ¡ããé©å¿ãããŠãã ããã